package com.wn.demo03;

import java.lang.reflect.Field;

/**
 * @author yellow Docter
 * @date 2022 -07-05
 * @desc
 */
public class Demo02 {

    public static void main(String[] args) throws Exception {

        //01 拿到 Person的class对象
         Class<Person> clazz = (Class<Person>) Class.forName("com.wn.demo03.Person");
        //02  那到所有的 person的属性
        Field[] declaredFields = clazz.getDeclaredFields();
        Person person = clazz.newInstance();

        //03 拿到 属性上面的注解
        for (Field field : declaredFields) {

            //判断是否有注解
            if (field.isAnnotationPresent(MyValue.class)){
                //04 拿到注解中的值
                //拿到指定的注解
                MyValue annotation = field.getAnnotation(MyValue.class);
                System.out.println(annotation.value());
                //05 反射把 注解中的值赋值给属性

                field.setAccessible(true);
                //拿到属性对象 进行赋值操作
                if (field.getType() == Integer.class){
                    field.set(person,Integer.parseInt(annotation.value()));
                }
                if (field.getType() == String.class){
                    field.set(person,annotation.value());
                }
            }
        }
        System.out.println("person = " + person);
    }

}
